/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：UICompositeTextTextBoxOrComboBoxUnit.js<br>
 * 日期：2016年9月20日<br>
 * 作者: 杨顺强<br>
 * 功能：该组件有Text组件、textbox或comboBox组件（二选一），和unit组成(可选)<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/
window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 函数名称：Rainier.UI.V2.UICompositeUserDefineTab<br>
 * 函数功能：该组件有Text组件、textbox或comboBox组件（二选一），和unit组成(可选)<br>
 * 参数输入：<br>
 * 异常信息：<br>
 */
Rainier.UI.V2.UICompositeTextTextBoxOrComboBoxUnit = Rainier.UI.V2.UIComposite.extend({
	
	NAME : "Rainier.UI.V2.UICompositeTextTextBoxOrComboBoxUnit",
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextTextBoxOrComboBoxUnit.init<br>
	 * 函数功能：初始化div容器对象<br>
	 * 参数输入：objParentComposite：UIComposite类型对象<br>
	 * 参数输入：objProperties ：div容器参数。该参数为对象
	 * {
	 * 		optionName  : "",	//参数名字，optionName以外面参数为准，请与外层参数值使用同一个optionName。
	 *   	text		:
	 *   	{
	 *   		style:"",		//在text的样式，控制style的位置					
	 *   		text :"",		//该text的内容。
	 *   	},
	 * 		textbox 	: {},	//该参数为textbox或者为combobox。其参数配置信息参见easyUI中对应组件的Properties
	 * 		unit		: ""	//单位类型，该参数可有可无
	 * 	}
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：未给参数名赋值<br>
	 */
	init : function(objParentComposite,objProperties){
		this.textBox  = null;
		this.comboBox = null;
		
		//当前组件中的配置参数信息
		if(objProperties.optionName){
			this.optionName = objProperties.optionName;
		}else{
			throw new Error("optionName 不能为空,必须为参数名赋值");
		}
		
		if(objProperties.text){
			this.text = objProperties.text;
		}else{
			throw new Error("text 不能为空,必须为参数名赋值");
		}
		
		for(var option in objProperties){
			if(option === "textbox"){
				this.textboxProperties = objProperties[option];
			}
			if(option === "combobox"){
				this.comboboxProperties = objProperties[option];
			}
		}
		
		if(objProperties.unit){
			this.unit = objProperties.unit;
		}
		this._super(objParentComposite,objProperties);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextTextBoxOrComboBoxUnit.createComposite<br>
	 * 函数功能：创建div容器，完成div容器的创建工作<br>
	 * 参数输入：eleParent : 父元素节点<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	createComposite : function(eleParent){
		this._super(eleParent);		
		var newEle = this.CreateElement("div",this.m_objProperties.id,null,{style:"margin-left:10px;margin-top:7px;float:left;"});
		eleParent.append(newEle);
		
		//为该组件添加子组件
		this.text = new Rainier.UI.V2.UICompositeText(this,this.text);
		
		if(this.textboxProperties){
			this.textBox 	 = new Rainier.UI.V2.UICompositeTextBox(this,this.textboxProperties);
			if(this.unit){			
				var element 		= this.textBox.getElement().parent();
				var descriptionsStr = $('<span>&nbsp;&nbsp;'+this.unit+'</span>');
				element.children(":last-child").after(descriptionsStr);
			}
		}
		if(this.comboboxProperties){
			this.comboBox = new Rainier.UI.V2.UICompositeComboBox(this,this.comboboxProperties);
			if(this.unit){			
				var element 		= this.textBox.getElement().parent();
				var descriptionsStr = $('<span>&nbsp;&nbsp;'+this.unit+'</span>');
				element.children(":last-child").after(descriptionsStr);
			}
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxTextBoxUnit.getOptionName<br>
	 * 函数功能：获取参数名字<br>
	 * 参数输入：无<br>
	 * 参数输出：<br>
	 * 函数返回：组件参数名字<br>
	 * 异常信息：无<br>
	 */
	getOptionName : function(){
		return this.optionName;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxTextBoxUnit.getTextBox<br>
	 * 函数功能：获取textBox对象<br>
	 * 参数输入：无<br>
	 * 参数输出：<br>
	 * 函数返回：组件textBox<br>
	 * 异常信息：无<br>
	 */
	getTextBox : function(){
		if(this.textBox){
			return this.textBox;
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxTextBoxUnit.getOptionName<br>
	 * 函数功能：获取comboBox组件<br>
	 * 参数输入：无<br>
	 * 参数输出：<br>
	 * 函数返回：组件comboBox<br>
	 * 异常信息：无<br>
	 */
	getComboBox : function(){
		if(this.comboBox){		
			return this.comboBox;
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxTextBoxUnit.getValidateboxValue<br>
	 * 函数功能：获取textbox的值<br>
	 * 参数输入：无<br>
	 * 函数返回：textbox中的数值<br>
	 * 异常信息：无<br>
	 */
	getTextBoxValue :function(){
		if(this.textBox){
			return this.textBox.getValue();			
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxTextBoxUnit.getComboBoxValue<br>
	 * 函数功能：获取combobox的值<br>
	 * 参数输入：无<br>
	 * 函数返回：combobox中的数值<br>
	 * 异常信息：无<br>
	 */
	getComboBoxValue :function(){
		if(this.comboBox){
			return this.comboBox.getValue();			
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxTextBoxUnit.getComponentValueObj<br>
	 * 函数功能：获取div容器中的textbox的值,形成参数对象<br>
	 * 参数输入：无<br>
	 * 函数返回：div容器中的参数对象<br>
	 * 异常信息：无<br>
	 */
	getComponentValueObj : function(){
		var obj = {};
		optionName = this.optionName;
		obj[optionName] = null;
		var value = null;
		if(this.textBox){
			value = this.getTextBoxValue();
		}
		if(this.comboBox){
			value = this.getComboBoxValue();
		}
		obj[optionName] = value;
		return obj;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxTextBoxUnit.setComponentValue<br>
	 * 函数功能：为组件赋值，当需要设置组件的值时，完成对组件值得设置<br>
	 * 参数输入：sValue ：String 组件的值<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	setComponentValue : function(sValue){
		if(this.textBox){
			this.textBox.setValue(sValue);
		}
		if(this.comboBox){
			this.comboBox.setValue(sValue);
		}
	},
	
	/**
	 * 函数名称：<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	disable : function(){
		if(this.textBox){
			this.textBox.disable();
		}
		if(this.comboBox){
			this.comboBox.disable();
		}
	},
	
	/**
	 * 函数名称：<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	isValid : function(){
		if(this.textBox){
			return this.textBox.isValid();
		}
		if(this.comboBox){
			return this.comboBox.isValid();
		}
	}
});
